<?php

class MaterialController extends AppController {

    var $name = 'Material';
    var $uses = array('Tienda', 'Integrador', 'Reporte', 'Postgres', 'Material', 'Clasificacion', 'ReporteSql', 'Logsql', 'Subclasificacion', 'Unidadmedida', 'Tipoarticulo', 'Cargosimpuesto', 'MaterialImpuesto', 'Supervisacion','MaterialSupervisacion');
    var $helpers = array('Html', 'Ajax', 'Javascript', 'Vista', 'Interfaz', 'Json');
    var $layout = "ajax";
    var $components = array('Utilitario', 'Interfaz', 'Vista', 'Query'/* ,'RequestHandler','DebugKit.Toolbar' */);

    function beforeFilter() {
        $this->validar();
    }

    public function index($busq = null) {
        //$this->permisos_menu_individual('Movimientos de Materiales'); ///BUSCA LOS PERMISOS QUE SE UTILIZARAN EN LA VISTA
        $this->set('busq', $busq);
        $condiciones['Material.id >'] = '0';
        $condiciones['Material.estatus !='] = 0;
        $filtros = '';

        if (!empty($this->request->data))
            if (!empty($this->request->data)) {
                $filtros = $this->request->data;
                extract($filtros);
            }
        if (!empty($filtros) && isset($vent_filtro)) {
            $this->set('opciones', $this->serializador($filtros, 2));
            if (!empty($codigo))
                $condiciones['Material.codigo ILIKE'] = "%$codigo%";
            if (!empty($nombre))
                $condiciones['Material.nombre ILIKE'] = "%$nombre%";
            if (!empty($estatus))
                $condiciones['Material.estatus'] = $estatus;
            if (!empty($tipoarticulos_id))
                $condiciones['Material.tipoarticulos_id'] = $tipoarticulos_id;
            if (!empty($subclasificacion_id))
                $condiciones['Material.subclasificacion_id'] = $subclasificacion_id;
        }
        $data = $this->Material->find('all', array('conditions' => $condiciones, 'order' => 'Material.id', 'limit' => MAX_PAGI));
        $mostrar = (count($data) > MAX_PAGI) ? MAX_PAGI : count($data);
        $this->set('data', $data);
        $this->Vista->title("Listado de Materiales");
        if (isset($vent_filtro))
            $this->Vista->cerrar_ventana($vent_filtro);
        $this->bloquear_buscador(2);
    }

    public function nuevo() {
        $listaClasificaciones = $this->Clasificacion->find('list', array('fields' => 'Clasificacion.id, Clasificacion.nombre', 'conditions' => array('Clasificacion.id >' => '0', 'Clasificacion.estatus' => 1), 'order' => 'Clasificacion.nombre'));
        $this->set('listaClasificaciones', $listaClasificaciones);
        $listaTipos = $this->Tipoarticulo->find('list', array('fields' => 'Tipoarticulo.id, Tipoarticulo.nombre', 'conditions' => array('Tipoarticulo.id >' => '0', 'Tipoarticulo.estatus' => 1), 'order' => 'Tipoarticulo.nombre'));
        $this->set('listaTipos', $listaTipos);
        $listaUnidades = $this->Unidadmedida->find('list', array('fields' => 'Unidadmedida.id, Unidadmedida.nombre', 'conditions' => array('Unidadmedida.id >' => '0', 'Unidadmedida.estatus' => 1), 'order' => 'Unidadmedida.nombre'));
        $this->set('listaUnidades', $listaUnidades);
    }

    public function modificar($id = null) {
        //$this->permisos_menu_individual('Movimientos de Materiales'); ///BUSCA LOS PERMISOS QUE SE UTILIZARAN EN LA VISTA
        $data = $this->request->data;
        if (!empty($data)) {
            if (!$this->Vista->empyt($data)) {
                extract($data);
                $id = $this->Interfaz->id($id_material);
                if (!$this->Vista->verifica('Material', 'codigo', $codigo, 'codigo', $id)) {
                    $this->Material->query('BEGIN WORK');
                    $datos['Material']['id'] = $id;
                    $datos['Material']['codigo'] = $codigo;
                    $datos['Material']['nombre'] = $this->Utilitario->mayuscula($nombre);
                    $datos['Material']['codigo_barra'] = $codigo;
                    $datos['Material']['tipoarticulos_id'] = $tipoarticulos_id;
                    $datos['Material']['unidadmedida_id'] = $unidadmedida_id;
                    $datos['Material']['clasificacion_id'] = $clasificacion_id;
                    $datos['Material']['subclasificacion_id'] = $subclasificacion_id;
                    $datos['Material']['serial'] = $serial;
                    $datos['Material']['costo'] = $this->Interfaz->miles_postgres($costo);
                    if ($this->Material->save($datos)) {
                        $this->Material->query('COMMIT');
                        $this->Vista->mensaje("Guardado Exitosamente", 'EXITO');
                        $this->log();
                        $this->Vista->cerrar_ventana($vent);
                    } else {
                        $this->Material->query('ROLLBACK');
                        $this->Vista->mensaje("Ocurrio un error Guardando", 'ERROR', 'codigo');
                    }
                }
                else
                    $this->Vista->mensaje("C&oacute;digo duplicado", 'ERROR');
            }
            else
                $this->Vista->mensaje("Faltan campos requeridos", 'ERROR');
            $this->index();
            $this->render('index');
        }
        else {
            $id = $this->Interfaz->id($id);
            if (is_numeric($id)) {
                $datos = $this->Material->find('first', array('conditions' => array('Material.id' => $id)));
                $this->set('data', $datos);
                $listaClasificaciones = $this->Clasificacion->find('list', array('fields' => 'Clasificacion.id, Clasificacion.nombre', 'conditions' => array('Clasificacion.id >' => '0', 'Clasificacion.estatus' => 1), 'order' => 'Clasificacion.nombre'));
                $this->set('listaClasificaciones', $listaClasificaciones);
                $listaTipos = $this->Tipoarticulo->find('list', array('fields' => 'Tipoarticulo.id, Tipoarticulo.nombre', 'conditions' => array('Tipoarticulo.id >' => '0', 'Tipoarticulo.estatus' => 1), 'order' => 'Tipoarticulo.nombre'));
                $this->set('listaTipos', $listaTipos);
                $listaUnidades = $this->Unidadmedida->find('list', array('fields' => 'Unidadmedida.id, Unidadmedida.nombre', 'conditions' => array('Unidadmedida.id >' => '0', 'Unidadmedida.estatus' => 1), 'order' => 'Unidadmedida.nombre'));
                $this->set('listaUnidades', $listaUnidades);
                $listaSubclasificaciones = $this->Subclasificacion->find('list', array('fields' => 'Subclasificacion.id, Subclasificacion.nombre', 'conditions' => array('Subclasificacion.id >' => '0', 'Subclasificacion.estatus' => 1, 'Subclasificacion.clasificacion_id' => $datos['Material']['clasificacion_id']), 'order' => 'Subclasificacion.nombre'));
                $this->set('listaSubclasificaciones', $listaSubclasificaciones);
                $listaTipos = $this->Tipoarticulo->find('list', array('fields' => 'Tipoarticulo.id, Tipoarticulo.nombre', 'conditions' => array('Tipoarticulo.id >' => '0', 'Tipoarticulo.estatus' => 1), 'order' => 'Tipoarticulo.nombre'));
            } else {
                $this->Vista->mensaje("Material Inv&aacute;lido", 'ERROR');
                $this->render("../" . PRINCIPAL . "/mensajes");
            }
        }
    }

    public function guardar($vent = null) {
        //	$this->permisos_accion_individual('unidad','nuevo','estatus'); // mensaje que se quiere mostrar
        $data = $this->request->data;
        if (!$this->Vista->empyt($data)) {
            extract($data);
            if (!$this->Vista->verifica('Material', 'codigo', $codigo, 'codigo')) {
                $this->Material->query('BEGIN WORK');
                $d['Material']['codigo'] = $codigo;
                $d['Material']['nombre'] = $this->Utilitario->mayuscula($nombre);
                $d['Material']['codigo_barra'] = $codigo;
                $d['Material']['tipoarticulos_id'] = $tipoarticulos_id;
                $d['Material']['unidadmedida_id'] = $unidadmedida_id;
                $d['Material']['clasificacion_id'] = $clasificacion_id;
                $d['Material']['subclasificacion_id'] = $subclasificacion_id;
                $d['Material']['serial'] = $serial;
                $d['Material']['costo'] = $this->Interfaz->miles_postgres($costo);
                $d['Material']['estatus'] = 1;
                // falta guardar en materia impuesto
                if ($this->Material->save($d)) {
                    $this->Vista->mensaje("Guardado Exitosamente!!!", 'EXITO');

                    $this->Material->query('COMMIT');
                    $this->log();
                    $this->Vista->cerrar_ventana($vent);
                } else {
                    $this->Vista->mensaje("Ocurrio un error actualizando", 'ERROR');
                    $this->Material->query('ROLLBACK');
                }
            }
            else
                $this->Vista->mensaje("C&oacute;digo duplicado", 'ERROR');
        }
        $this->index();
        $this->render('index');
    }

    public function reporte_excel($formato = 1, $b = 1, $busq = null) {
        $condiciones['Material.id >'] = '0';
        $condiciones['Material.estatus !='] = 0;
        $busq = (strpos($busq, 'menuadmin') === false) ? $busq : '';
        if (!empty($busq)) {
            if ($b == 2) {
                $dataSerializada = $this->serializador($busq, 1); //1 convierte la cadena serializada en un arreglo
                if (is_array($dataSerializada)) {
                    extract($dataSerializada);
                    if (!empty($codigo))
                        $condiciones['Material.codigo ILIKE'] = "%$codigo%";
                    if (!empty($nombre))
                        $condiciones['Material.nombre ILIKE'] = "%$nombre%";
                    if (!empty($estatus))
                        $condiciones['Material.estatus'] = $estatus;
                    if (!empty($tipoarticulos_id))
                        $condiciones['Material.tipoarticulos_id'] = $tipoarticulos_id;
                    if (!empty($subclasificacion_id))
                        $condiciones['Material.subclasificacion_id'] = $subclasificacion_id;
                    $data = $this->Material->find('all', array('conditions' => $condiciones, 'order' => 'Material.codigo'));
                    $this->set('data', $data);
                }
            }
            else
                $this->_principal_buscador_reporte('Material', $busq);
        } else {
            $data = $this->Material->find('all', array('conditions' => $condiciones, 'order' => 'Material.codigo'));
            $this->set('data', $data);
        }
        $this->set('formato', $formato);
    }

    public function eliminar($id = null) {
        //$this->permisos_menu_individual('Movimientos de Materiales'); ///BUSCA LOS PERMISOS QUE SE UTILIZARAN EN LA VISTA
        $id = $this->Interfaz->id($id);
        if (is_numeric($id)) {
            $total = $this->Material->find('count', array('conditions' => array("Material.estatus" => 0)));
            $this->Material->query('BEGIN WORK');
            $data['Material']['id'] = $id;
            $data['Material']['codigo'] = ++$total;
            $data['Material']['estatus'] = 0;
            if ($this->Material->save($data)) {
                $this->Material->query('COMMIT');
                $this->Vista->mensaje("Eliminado Exitosamente", 'EXITO');
                $this->log();
            } else {
                $this->Material->query('ROLLBACK');
                $this->Vista->mensaje("Ocurrio un error Eliminando", 'ERROR');
            }
        } else {
            $this->Vista->mensaje("Material Inv&aacute;lida", 'ERROR');
            $this->render("../" . PRINCIPAL . "/mensajes");
        }
        $this->index();
        $this->render('index');
    }

    public function cargar($id = null) {
        //$this->permisos_menu_individual('Movimientos de Materiales'); ///BUSCA LOS PERMISOS QUE SE UTILIZARAN EN LA VISTA
        $data = $this->request->data;
        if (!empty($data)) {
            if (!$this->Vista->empyt($data)) {
                extract($data);
                $id = $this->Interfaz->id($id_material);
                $this->MaterialImpuesto->query('BEGIN WORK');
                $datos['MaterialImpuesto']['material_id'] = $id;
                $datos['MaterialImpuesto']['cargosimpuesto_id'] = $cargosimpuesto_id;
                $datos['MaterialImpuesto']['desde'] = $this->Utilitario->guar_fecha($desde);
                $datos['MaterialImpuesto']['hasta'] = $this->Utilitario->guar_fecha($hasta);
                $datos['MaterialImpuesto']['usuario_id'] = $this->Interfaz->id($_SESSION['usuario_id']);
                $datos['MaterialImpuesto']['estatus'] = 1;
                if ($this->MaterialImpuesto->save($datos)) {
                    $this->MaterialImpuesto->query('COMMIT');
                    $this->Vista->mensaje("Guardado Exitosamente", 'EXITO');
                    $this->log();
                    $this->Vista->cerrar_ventana($vent);
                } else {
                    $this->MaterialImpuesto->query('ROLLBACK');
                    $this->Vista->mensaje("Ocurrio un error Guardando", 'ERROR', 'codigo');
                }
            }
            else
                $this->Vista->mensaje("Faltan campos requeridos", 'ERROR');
            $this->index();
            $this->render('index');
        }
        else {
            $id = $this->Interfaz->id($id);
            if (is_numeric($id)) {
                $datos = $this->Material->find('first', array('conditions' => array('Material.id' => $id)));
                $this->set('data', $datos);
                $listaCargos = $this->Cargosimpuesto->find('list', array('fields' => 'Cargosimpuesto.id, Cargosimpuesto.nombre', 'conditions' => array('Cargosimpuesto.id >' => '0', 'Cargosimpuesto.estatus' => 1), 'order' => 'Cargosimpuesto.nombre'));
                $this->set('listaCargos', $listaCargos);
                $fechaActual = date('Y-m-d');
                $sql = "select fnc_buscar_impuesto($id, '$fechaActual') as impuesto";
                $impuestoActual = $this->Material->query($sql);
                $impuestoActual = $impuestoActual[0][0]['impuesto'];
                $porcentaje = $this->Cargosimpuesto->find('first', array('fields' => 'Cargosimpuesto.id', 'conditions' => array('Cargosimpuesto.porcentaje' => $impuestoActual)));
                $idCargoActual = $porcentaje['Cargosimpuesto']['id'];
                $this->set('idCargoActual', $idCargoActual);
                $dataImpuestos = $this->MaterialImpuesto->find('all', array('conditions' => array('MaterialImpuesto.id >' => '0', 'MaterialImpuesto.material_id' => $id), 'order' => 'MaterialImpuesto.id'));
                $this->set('dataImpuestos', $dataImpuestos);
            } else {
                $this->Vista->mensaje("Material Inv&aacute;lido", 'ERROR');
                $this->render("../" . PRINCIPAL . "/mensajes");
            }
        }
    }

    public function evento_clasificacion($id = null) {
        $listaSubclasificaciones = $this->Subclasificacion->find('list', array('fields' => 'Subclasificacion.id, Subclasificacion.nombre', 'conditions' => array('Subclasificacion.id >' => '0', 'Subclasificacion.estatus' => 1, 'Subclasificacion.clasificacion_id' => $id), 'order' => 'Subclasificacion.nombre'));
        $this->set('listaSubclasificaciones', $listaSubclasificaciones);
    }

    public function filtro() {
        //$this->permisos_menu_individual('Movimientos de Materiales'); ///BUSCA LOS PERMISOS QUE SE UTILIZARAN EN LA VISTA    
        $listaClasificaciones = $this->Clasificacion->find('list', array('fields' => 'Clasificacion.id, Clasificacion.nombre', 'conditions' => array('Clasificacion.id >' => '0', 'Clasificacion.estatus' => 1), 'order' => 'Clasificacion.nombre'));
        $this->set('listaClasificaciones', $listaClasificaciones);
        $listaSubclasificaciones = $this->Subclasificacion->find('list', array('fields' => 'Subclasificacion.id, Subclasificacion.nombre', 'conditions' => array('Subclasificacion.id >' => '0', 'Subclasificacion.estatus' => 1), 'order' => 'Subclasificacion.nombre'));
        $this->set('listaSubclasificaciones', $listaSubclasificaciones);
        $listaTipos = $this->Tipoarticulo->find('list', array('fields' => 'Tipoarticulo.id, Tipoarticulo.nombre', 'conditions' => array('Tipoarticulo.id >' => '0', 'Tipoarticulo.estatus' => 1), 'order' => 'Tipoarticulo.nombre'));
        $this->set('listaTipos', $listaTipos);
    }
    
    public function supervisar($id = null) {
        //$this->permisos_menu_individual('Movimientos de Materiales'); ///BUSCA LOS PERMISOS QUE SE UTILIZARAN EN LA VISTA
        $id = $this->Interfaz->id($id);
        if (is_numeric($id)) {
            $datosMS = $this->MaterialSupervisacion->find('first', array('fields' => 'MaterialSupervisacion.id, MaterialSupervisacion.supervisacion_id, MaterialSupervisacion.maximo','conditions' => array('MaterialSupervisacion.material_id' => $id)));            
            $datos = $this->Material->find('first', array('fields' => 'Material.id, Material.codigo, Material.nombre, Unidadmedida.nombre_minimo','conditions' => array('Material.id' => $id)));
            $listasupervision = $this->Supervisacion->find('list', array('fields' => 'Supervisacion.id, Supervisacion.nombre', 'conditions' => array('Supervisacion.id >' => '0', 'Supervisacion.estatus' => 1), 'order' => 'Supervisacion.nombre'));
            $this->set('listasupervision', $listasupervision);
            $this->set('datos', $datos);
            $this->set('datosMS', $datosMS);
        } else {
            $this->Vista->mensaje("Material Inv&aacute;lida", 'ERROR');
            $this->render("../" . PRINCIPAL . "/mensajes");
        }
    }
    
    public function guardar_supervisar($id = null) {
        //$this->permisos_menu_individual('Movimientos de Materiales'); ///BUSCA LOS PERMISOS QUE SE UTILIZARAN EN LA VISTA
        $data = $this->request->data;
        if (!empty($data)) {
            if (!$this->Vista->empyt($data)) {
                $this->MaterialSupervisacion->query('BEGIN WORK');
                if(isset($data['id']))
                    $datos['MaterialSupervisacion']['id'] = $this->Interfaz->id($data['id']);
                $datos['MaterialSupervisacion']['material_id'] = $this->Interfaz->id($data['id_material']);
                $datos['MaterialSupervisacion']['supervisacion_id'] = $data['supervisacion_id'];
                $datos['MaterialSupervisacion']['maximo'] = $data['maximo'];
                if ($this->MaterialSupervisacion->save($datos)) {
                    $this->MaterialSupervisacion->query('COMMIT');
                    $this->Vista->mensaje("Datos Guardados Exitosamente", 'EXITO');
                    $this->log();
                    $this->Vista->cerrar_ventana($vent);
                } else {
                    $this->MaterialSupervisacion->query('ROLLBACK');
                    $this->Vista->mensaje("Ocurrio un error Guardando", 'ERROR', 'codigo');
                }               
            }
            else
                $this->Vista->mensaje("Faltan campos requeridos", 'ERROR');
        }
        $this->render("../" . PRINCIPAL . "/mensajes");
    }
}

//class
?>
